using System.Linq;
using System.Threading.Tasks;
using System.Collections.Generic;

namespace MyApi.Api.Repository
{
    //interface 接口 
    public interface IRepository<T>
    {
        //IQueryable<T> 是将Skip ,take 这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令，它并不是把所有数据都加载到内存里来才进行条件过滤。
        IQueryable<T> Table { get; }

        //根据Id获取指定实体
        T GetById(int id);

        // 使用实体对象，插入数据
        void Insert(T entity);

        // 使用实体对象，插入数据(异步)
        Task InsertAsync(T entity);

         // 批量插入若干数据
        void InsertBulk(IEnumerable<T> entities);


        //批量插入若干数据(异步)
        Task InsertBulkAsync(IEnumerable<T> entities);

        //使用实体对象，更新数据
        void Update(T entity);

        //根据对象更新数据(异步)
        void UpdateBulk(IEnumerable<T> entities);
        
        //使用实体对象，删除数据
        void Delete(int id);
    }
}